﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Wedn.Model.Data;

namespace Wedn.Interface.DAL
{
    /// <summary>
    /// 链接表操作类接口
    /// </summary>
    public interface ILink
    {
        /// <summary>
        /// 创建链接表操作对象
        /// </summary>
        /// <returns>链接表操作对象</returns>
        IComment CreateDAO;

        #region 增加记录
        /// <summary>
        /// 向链接表中插入一行数据, 返回执行结果受影响行数
        /// </summary>
        /// <param name="link">要插入的对象</param>
        /// <returns>执行结果受影响行数</returns>
        int Insert(Link link);
        #endregion

        #region 删除记录

        #region 删除一条记录
        /// <summary>
        /// 根据链接ID删除链接表对应的一条记录, 返回执行结果受影响行数
        /// </summary>
        /// <param name="id">要删除记录的链接ID</param>
        /// <returns>执行结果受影响行数</returns>
        int Delete(int id);
        #endregion

        #region 删除多条记录
        /// <summary>
        /// 根据链接ID数组删除链接表对应的多条记录, 返回执行结果受影响行数
        /// </summary>
        /// <param name="ids">要删除记录的链接ID数组</param>
        /// <returns>执行结果受影响行数</returns>
        int Delete(int[] ids);
        #endregion

        #endregion

        #region 更新记录

        #region 更新完整对象
        /// <summary>
        /// 更新一个完整链接对象, 返回执行结果受影响行数
        /// </summary>
        /// <param name="link">要更新的对象</param>
        /// <returns>执行结果受影响行数</returns> 
        int UpdateLink(Link link);
        #endregion

        #region 更新常用字段

        /// <summary>
        /// 根据链接ID数组批量更新多个链接的父ID, 返回执行结果受影响行数
        /// </summary>
        /// <param name="ids">链接ID数组</param>
        /// <param name="parentId">父ID</param>
        /// <returns>执行结果受影响行数</returns>
        int UpdateParentId(int[] ids, int parentId);

        /// <summary>
        /// 根据链接ID更新一个链接常用字段, 返回执行结果受影响行数
        /// </summary>
        /// <param name="id">链接ID</param>
        /// <param name="name">更新的名称(不更新则传入null)</param>
        /// <param name="url">更新的网址(不更新则传入null)</param>
        /// <param name="target">更新的目标窗口(不更新则传入null)</param>
        /// <param name="visible">更新的是否可见(不更新则传入null)</param>
        /// <returns>执行结果受影响行数</returns> 
        int UpdateInfo(int id, string name, string url, string target, bool visible);

        #endregion

        #endregion

        #region 选取记录

        #region 选取表中主键最大值
        /// <summary>
        /// 获取表中主键最大值, 返回主键最大值
        /// </summary>
        /// <returns>主键最大值</returns>
        int SelectMaxId();
        #endregion

        #region 选取集合

        #region 选取全部链接
        /// <summary>
        /// 取出当前链接表中的所有链接信息, 返回所有链接信息集合
        /// </summary>
        /// <returns>所有链接信息对象集合</returns>
        List<Link> SelectLinkList();
        #endregion

        #region 根据链接类型选取链接不区分链接是否启用
        /// <summary>
        /// 根据链接类型选取链接信息不区分链接是否启用
        /// </summary>
        /// <param name="type">类型名称(nav;footer;blogroll...)</param>
        /// <returns>包涵指定类型所有链接信息的数据表</returns>
        List<Link> SelectLinkList(string type);
        #endregion

        #region 根据链接类型选取启用链接
        /// <summary>
        /// 根据链接类型选取已经启用链接信息
        /// </summary>
        /// <param name="type">类型名称(nav;footer;blogroll...)</param>
        /// <param name="visible">是否是可用链接</param>
        /// <returns>包涵指定类型已经启用所有链接信息的数据表</returns>
        List<Link> SelectLinkList(string type, bool visible);
        #endregion

        #region 根据父ID选取全部链接对象集合
        /// <summary>
        /// 根据父ID取出当前链接表中的全部链接对象集合
        /// </summary>
        /// <returns>链接对象集合</returns>
        List<Link> SelectLinks(int parentid);
        #endregion

        #region 根据父ID选取是否启用链接对象集合
        /// <summary>
        /// 根据父ID取出当前链接表中的是否启用链接对象集合
        /// </summary>
        /// <returns>链接对象集合</returns>
        List<Link> SelectLinks(int parentId, bool visible);
        #endregion
        
        #endregion

        #region 根据ID选取链接对象
        /// <summary>
        /// 根据ID取出当前链接表中的链接对象
        /// </summary>
        /// <returns>链接对象</returns>
        Link SelectLink(int id);
        #endregion

        #endregion
    }
}
